// 权限检查
// 导入Vuex存储仓库
import store from './store/index'
// 导入权限数组转换成路由数组方法
import pagePermission from './utils/page-permission'

// 导入路由
import router from './router/index'
// 前置导航守卫
router.beforeEach(async(to, from, next) => {
  // 判断是否存在token
  if (store.state.user.token) {
    // 已登录
    // 如果没有存在用户信息才发起请求
    if (!store.state.user.userInfo.userId) {
      // 获取用户信息
      await store.dispatch('user/getUserInfo')
      // 获取权限数组
      const { menus } = store.state.user.userInfo.roles
      // 将权限数组转换成路由数组
      const res = pagePermission(menus)
      // 根据文档  动态注册路由 将404手动放在路由最后
      router.addRoutes([...res, { path: '*', redirect: '/404', hidden: true }])
      // 把新路由添加到Vuex中,Vuex中存储当前用户所有的路由
      store.commit('pages/updataRoute', res)
      // 再跳转一次，动态添加的路由，这一次导航守卫中访问不到的
      next(to)
    }
    if (to.path === '/login') {
      // 跳转到首页
      next('/')
      return
    }
    // 其他网页允许访问
    next()
    return
  }
  // 设置白名单
  const whiteList = ['/login', '/404']
  // 检查是否是登录或者404页面
  if (whiteList.includes(to.path)) {
    // 如果是允许通过
    next()
    return
  }
  // 不然跳转登录页
  next('/login')
})
